//定义用户相关的仓库数据
import {defineStore} from "pinia";

// 引入获取验证码的请求方法
import {reqCode, reqUserLogin} from "@/api/hospital";
import type {LoginData, UserLoginResponseData} from "@/api/hospital/type.ts";
import type {UserState} from "@/store/modules/interface";
import {GET_TOKEN, REMOVE_TOKEN, SET_TOKEN} from "@/utils/user.ts";

const useUserStore = defineStore("User",{
    state: ():UserState => {
        return {
            visible:false,//用于控制登录组件的dialog显示与隐藏
            code:"", // 存储用户的验证码
            userInfo:JSON.parse(GET_TOKEN() as string) || {}, // 用户信息
        }
    },
    actions:{
        //获取验证码的方法
         async getCode(phone:string) {
            //  向服务器发送验证码请求,携带手机号参数
                //正常情况下只需要发送一个请求,后台就好将验证码推送到用户的手机上,这里不做验证码推送到用户手机的实现(需要花钱)
            let result:any = await reqCode(phone);
             if (result.code === 200) {
                 //存储验证码到Pinia仓库
                 this.code = result.data;

                 // 温馨提示: 验证码已发送到 Chrome浏览器 控制台
                 console.log("验证码: ", this.code);

                 return "ok";
             } else {
                 return Promise.reject(new Error(result.message));
             }

        },
        // 用户手机号登录方法
        async userLogin(loginData: LoginData) {
            let result:UserLoginResponseData = await reqUserLogin(loginData);
            if (result.code == 200) {
                // 成功
                this.userInfo = result.data;
                // 本地持久化存储用户信息到(避免刷新丢失)
                SET_TOKEN(JSON.stringify(this.userInfo));
                return "ok";
            } else {
                // 失败
                return Promise.reject(new Error(result.message));
            }
        },
        // 退出登录
        logout() {
             // 清空Pinia仓库的数据
             this.userInfo = {name:"",token:""};
             // 清空浏览器本地数据
            REMOVE_TOKEN();
        },
        //查询微信扫码接口/本地localStore是否存储数据
        queryState(){
              // 开启定时器,查询本地信息是否存在
              let timer = setInterval(()=>{
                  // 如果已扫码成功本地存储已有数据
                  if (GET_TOKEN()) {//当已扫码成功即本地已经缓存有数据
                      // 关闭对话框
                      this.visible = false;
                      this.userInfo = JSON.parse(GET_TOKEN() as string);
                      // 清除定时器 timer
                      clearInterval(timer);
                  }

              },500);
        },
    },
    getters:{},
});

export default useUserStore;


































































